/* timer.c */
#include "timer.h"

// 假设全局变量tick已经定义，用于存储时间戳
// 实际上，tick应该被定义为静态的，以避免在不同文件间共享
static uint32_t tick = 0;

TimerTimestamp_t Timer_Get_TimeStamp(void) {
    // 使用FreeRTOS的xTaskGetTickCount获取当前的系统滴答计数
    tick = xTaskGetTickCount();
    return tick; // 转换为毫秒
}

bool Timer_Time_Elapsed(TimerTimestamp_t time_stamp, uint32_t interval) {
    bool result = false;
    TimerTimestamp_t current_tick = Timer_Get_TimeStamp();
    if ((current_tick - time_stamp) >= interval) {
        result = true;
    } else if (time_stamp > current_tick && (time_stamp + interval) >= current_tick) {
        /* 检查溢出条件 */
        result = true;
    }
    return result;
}

/**
 * @brief 实现一个基于定时器的时间延迟功能。
 * 
 * 该函数将延迟执行的代码，直到过了指定的间隔时间才继续执行。
 * 它通过获取当前时间戳，并持续检查过去的时间是否达到了指定的间隔。
 * 
 * @param interval 指定的延迟时间间隔，单位为毫秒。
 */
void Timer_Time_Delay(uint32_t interval) {
    // bool result = false; // 用于存储操作结果的临时变量，此处未使用
    
    // 获取当前的时间戳
    TimerTimestamp_t current_tick = Timer_Get_TimeStamp();

    // 循环检查过去的时间是否达到了指定的间隔
    while (Timer_Time_Elapsed(current_tick, interval) == false)
    {
        /* 此处可以添加需要在延迟期间执行的代码 */
    }
    
    // 循环结束，延迟时间已到，继续执行后续代码
}